<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 1.JS延迟加载的方式有哪些？（5）
      // (1)把js文件放到body最底部
      // (2)使用defer属性

      // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；（5）
      // ECMAScript-------(ECMA组织制定的一套标准，js的核心，规定了js的语法规范)
      // DOM------(document object model，文档对象模型，提供与网页内容交互的方法和接口)
      // BOM------(brower object model，浏览器对象模型，提供与网页内容交互的方法和接口)

      // 3.JavaScript 的数据类型有哪些？（5）
      // 基本数据类型：String、Number、Boolean、Undefined、Null、Symbol
      // 引用数据类型:Array、Object、Function

      // 4.如何进行数据类型的判断？（5）
      // (1)typeof
      // (2)instanceof
      // (3)Object.prototype.toString.call()
      // (4)call、apply、bind

      // 5.null 和 undefined 的区别？什么时候会得到 undefined？（5）
      // undefined表示已声明但未赋值，null表示空值、空对象(不存在的对象)
      // （1）变量被声明了，但没有赋值时，就等于undefined。
      // （2) 对象没有赋值的属性，该属性的值为undefined。
      // （3）调用函数时，应该提供的参数没有提供，该参数等于undefined。
      // （4）函数没有返回值时，默认返回undefined。

      // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？（5）
      // ==等于号，检测数据内容是否相等
      // ===全等于号，除了检测数据内容外还会检测数据类型是否相等

      // 7.使用 continue 或 break 终止循环时，两种方式的区别是？（5）
      // break 终止整个循环(流程)
      // continue 跳出当前符合条件的流程，继续下一次流程

      // 8.如何判断字符串内是否包含指定字符？（5）
      // indexOf()方法、lastIndexOf()方法、includes()方法

      // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
      // 会修改原数组的数组方法：splice()、reverse()、push()、pop()、shift()、unshift()、sort()
      // 不会修改原数组的数组方法：concat()、join()、indexOf()、lastIndexOf()、includes()、slice()

      // 10. 请写出下面语句的输出结果：（5）
      // var bar = true,
      //   number = 0;
      // console.log(bar + 0); // 1
      // console.log(bar + "xyz"); // "truexyz"
      // console.log(bar + true); // 2
      // console.log(+true); // 1
      // console.log(!"bluej"); // false
      // console.log(number++); // 0
      // console.log(++number); // 2
      // console.log(number); //2

      // 11. 根据用户输入时间实现倒计时，输入格式错误时要有所提示（5）
      // window.prompt("请输入目标时间");

      // let targetTime = prompt(
      //   "输入任意时间查看倒计时，例如2021-11-11 00:00:00"
      // );
      // if (new Date().getTime(targetTime) - Date.now() <= 0) {
      //   console.log("活动已结束");
      // } else {
      // }

      let targetTime = new Date("2021 9 11").getTime();
      let timer;

      function timeFn() {
        console.clear();
        let nowTime = Date.now();
        let timeDiff = parseInt((targetTime - nowTime) / 1000);

        let days = parseInt(timeDiff / (60 * 60 * 24));
        let hours = parseInt((timeDiff / (60 * 60)) % 24);
        let minutes = parseInt((timeDiff / 60) % 60);
        let seconds = parseInt(timeDiff % 60);

        if (targetTime - nowTime > 0) {
          console.log(
            `目标时间倒计时：${days}天${hours}小时${minutes}分钟${seconds}秒`
          );
        } else {
          clearInterval(timer);
          console.log(`活动已结束！`);
        }
      }

      timer = setInterval(function () {
        timeFn();
      }, 1000);

      // console.log(nowTime);

      // 13.把下面数组成员排序打乱；（5）
      // var arr = [10, 20, 30, 40, 50, 60];
      // let newArr1 = [];

      // for (let i = 0; i < arr.length; i++) {
      //   let index = Math.floor(Math.random() * arr.length);
      //   if (!newArr1.includes(arr[index])) {
      //     newArr1.push(arr[index]);
      //   } else {
      //     i--;
      //   }
      // }

      // console.log(newArr1);

      // 12.输出从小到大排序好的五个不重复的随机"素数",范围[10-58)；（10）
      // let newArr2 = [];
      // let flag = true;

      // function fn(min, max) {
      //   let flag = true; //假设true就是素数，false不是素数
      //   for (let i = 0; i < 5; i++) {
      //     let num = Math.floor(Math.random() * (max - min) + min);
      //     for (let k = 2; k < num; k++) {
      //       if (num % k == 0) {
      //         flag = false; //不是素数
      //         break;
      //       }
      //     }

      //     if (flag && newArr2.indexOf(num) == -1) {
      //       newArr2.push(num);
      //       // flag = true; //需要把状态更新flag
      //     } else {
      //       i--;
      //       // flag = true; //需要把状态更新flag
      //     }
      //   }

      //   newArr2.sort(function (a, b) {
      //     return a - b;
      //   });

      //   console.log(newArr2);
      // }

      // fn(10, 58);

      // 14. 将多个数组进行去重合并；（10）
      // var arr1 = [1, 2, 3],
      //   arr2 = [2, 3, 4, 5];

      // arr2.forEach(function (item, index) {
      //   if (arr1.indexOf(item) == -1) {
      //     arr1.push(item);
      //   }
      // });

      // console.log(arr1);

      // // 15. 找出数组 arr=[1, 2, 3, "melon", 4, "melon", 2, 4, "melon"] 中重复出现过的元素,并用数组将重复元素装起来输出,并且统计每个元素出现的次数（10）
      // let arr4 = [1, 2, 3, "melon", 4, "melon", 2, 4, "melon"];
      // let arr5 = [];

      // arr4.filter(function (item, index) {
      //   if (
      //     arr5.indexOf(item) == -1 &&
      //     arr4.indexOf(item) != arr4.lastIndexOf(item)
      //   ) {
      //     arr5.push(item);
      //   }
      // });

      // console.log(arr5);

      // 16. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
      var arr6 = [
        {
          name: "111",
          sex: "boy",
          age: 18,
          count: 20,
        },
        {
          name: "222",
          sex: "girl",
          age: 17,
          count: 30,
        },
        {
          name: "333",
          sex: "boy",
          age: 16,
          count: 40,
        },
        {
          name: "444",
          sex: "girl",
          age: 15,
          count: 50,
        },
        {
          name: "555",
          sex: "boy",
          age: 20,
          count: 60,
        },
        {
          name: "666",
          sex: "girl",
          age: 13,
          count: 70,
        },
        {
          name: "777",
          sex: "boy",
          age: 14,
          count: 80,
        },
      ];

      let arr7 = [];

      // 找出数组中年龄小于18岁的女生的信息重新组成新的数组
      arr6.filter(function (item) {
        if (item["age"] < 18 && item["sex"] == "girl") {
          arr7.push(item);
        }
      });

      //count变成现有的平方
      arr7.forEach(function (item) {
        item["count"] *= item["count"];
      });

      console.log(arr7);
    </script>
  </body>
</html>
